In modern software application development and deployment, it is common for one version of an application to be in use by users and for users to be able to update their application to a new version via an automated or semi-automated process over a communications connection. This new version may contain new functionality, new appearance and/or new content.
For example, one common method of deploying new versions of applications involves monitoring a server and notifying a user at their device (such as a smart-phone, tablet, or personal computer) when a new version is available. The new version can then be selected to update their current version. Another method of updating applications is in use on iOS 7 devices and Android devices, where the operating system on the device automatically downloads and installs new versions of applications existing on those devices.
In both instances, updating the application at the software developer side involves updating the code base, preparing the app submission and awaiting a review from the deployment manager (such as Apple for the Appstore). This process takes hours and is high risk as bugs can easily have entered the code base by mistake. Also the download size for application updates is significant as the entire app is downloaded and reinstalled it. The download size imposes two big problems. Firstly it's a wasteful use of an expensive 3G connection, and so is disabled by default by the operating systems of most portable devices. Secondly, larger apps, can reach 500 mb and, even over wifi, this can be quite a slow way to update an app.
The other way to deliver new functionality or appearance to a user of an application is to use web-based applications. Apps use HTML to deliver appearance in varying degrees. Apps can be a “pure native app” which use no HTML styling at all. Or they can be a “hybrid app”, which use mostly native components to standardize appearance of navigation, but use HTML to present formatted content, which would be time consuming to develop for native presentation. At the furthest extreme apps can be completely HTML—a “web page in an app”. These apps use HTML to present both content and navigation structures such as tabs.
Pure native and hybrid apps (both to be referred to as native apps) have differing benefits to pure HTML apps. Pure HTML apps have advantages based around HTML being a standard web formatting for content, such as blog posts. This is ideal for apps with a lot of web formatted content, but the downsides are when the native SDK (Software Development Kit) implements some of the styling better, such as navigational structures like tabs. This is especially problematic when a new OS radically changes the appearances of the standard app. This results in significant redevelopment effort as the HTML app is rewritten to migrate to the new styling.
Native apps have the best of both worlds as they can embed HTML content and keep the standard look and feel of the native OS. Furthermore, for more complicated apps, native has more advantages, as they execute significantly faster on the device than web content and generally feel more responsive for the user.
Therefore, there is a desire for a system to facilitate dynamic modification of deployed applications.
There are some existing approaches for dynamic updating of applications, but many applications are able to only update their content dynamically and not their appearance or functionality.
Some A/B testing companies provide solutions to updating an app's appearance, but these methods do not change the applications' appearance dynamically and simply enable some hardcoded style to become visible. Other A/B companies enable remote restyling using HTML within pure HTML applications to present a new appearance.
Furthermore, during development of applications, it is often desirable to be able to preview the application. There are three techniques for doing this. The first is to deploy directly to a device (for example, using the Xcode IDE). The second is to connect to a device emulator running as a virtual machine on the developer's machine (for example, using the Android SDK). The third is where a simulated application is generated by the IDE for execution directly on the developer's machine (for example, as supported within the Xcode IDE).
The disadvantages of the above techniques is that (a) the source code of the application is required during this phase and (b) the source code must be modified and the application recompiled for any development iteration that requires previewing. This introduces the possibility of bugs into the code, restricts development in this phase to skilled programmers, and slows down development.
Therefore, there is also a desire for a system which facilitates the development of applications.
It is an object of the present invention to provide a method and system for dynamically modifying deployed applications which overcomes the disadvantages of the prior art, or at least provides a useful alternative.